import { cloneDeep } from 'lodash';
//初始状态
const initialState = cloneDeep({
  curMode: 'input', // 当前模式 input:输入模式, handle:操作模式
  bottomSelect: [], //底部输入框下拉
  curTab: 'good_article', //当前tab 默认fact
  showBottomSelect: false, //是否显示下拉
  aiChatLog: [], //AI聊天框记录
  handleLog: [], //操作框记录
  queryLoad: false, //查询中状态
  typewriterState: false, //打字机状态
  isHandleLoad: false, //是否操作中 与打字机 上传 联动
  goodSentenceTab: null, //好词好句空间tab 当选中 MY_TRAIN 我训练的 才出现去训练按钮
});

const SpaceBotModel = {
  namespace: 'spaceBot',
  state: initialState, // 使用深拷贝的 initialState
  reducers: {
    updateState(state, action) {
      const { aiChatLog } = action.payload;
      return {
        ...state,
        ...action.payload,
      };
    },
    updateStateAsync(state, action) {
      const { ...payload } = action.payload;
      const newState = cloneDeep(state);
      // 遍历传递的参数对象
      for (const key in payload) {
        if (payload.hasOwnProperty(key)) {
          const value = payload[key];

          // 检查字段的数据类型
          if (Array.isArray(value)) {
            // 如果是数组，合并数组
            newState[key] = value; // 直接使用传递的数组值
          } else if (typeof value === 'object' && !Array.isArray(value)) {
            // 如果是对象，合并对象
            newState[key] = { ...state[key], ...value };
          } else {
            // 否则，直接赋值
            newState[key] = value;
          }
        }
      }

      return newState;
    },
    getStateParam(state, action) {
      const { paramName } = action.payload;
      if (paramName) {
        // 如果传递了参数名，则返回对应参数的值
        return state[paramName];
      }
      // 如果没有传递参数名，则返回整个 state
      return state;
    },
    resetState() {
      return cloneDeep(initialState); // 重置状态时也使用深拷贝的 initialState
    },
  },
};

export default SpaceBotModel;
